package org.dicr.gui;

import java.io.*;
import java.util.*;

/***********************************************************************************************************************
 * @author Igor A Tarasov me@dicr.dn.ua
 * @version 020830
 **********************************************************************************************************************/
public class CustomFileFilter extends javax.swing.filechooser.FileFilter implements java.io.FileFilter {
	private Vector<String> exts = new Vector<String>();

	private String description = "Выбранные типы";

	/*******************************************************************************************************************
	 * Конструктор
	 ******************************************************************************************************************/
	public CustomFileFilter() {
		super();
	}

	/*******************************************************************************************************************
	 * Добавляет расширение к списку принимаемых расширений
	 ******************************************************************************************************************/
	public void addExt(String ext) {
		if (ext != null) {
			String theExt = ext;
			while (theExt.startsWith(".")) {
				theExt = theExt.substring(1);
			}
			this.exts.add(theExt);
		}
	}

	/*******************************************************************************************************************
	 * Очищает (удаляет все элементы) из списка принимаемых расширений
	 ******************************************************************************************************************/
	public void clear() {
		this.exts.removeAllElements();
	}

	/*******************************************************************************************************************
	 * Возвращает список всех принимаемых расширений
	 ******************************************************************************************************************/
	public Vector<String> getExts() {
		return this.exts;
	}

	/*******************************************************************************************************************
	 * Проверка файла на подходящий тип
	 ******************************************************************************************************************/
	@Override
	public boolean accept(File f) {
		if (f.isDirectory()) return true;
		String name = f.getName();
		for (int i = 0; i < this.exts.size(); i++) {
			String ext = this.exts.get(i);
			ext = ext.toLowerCase();
			if (name.endsWith("." + ext)) return true;
			ext = ext.toUpperCase();
			if (name.endsWith("." + ext)) return true;
		}
		return false;
	}

	/*******************************************************************************************************************
	 * Возвращает описание фильтра
	 ******************************************************************************************************************/
	@Override
	public String getDescription() {
		return this.description;
	}

	/*******************************************************************************************************************
	 * Устанавливает описание фильтра
	 ******************************************************************************************************************/
	public void setDescription(String theDescription) {
		this.description = theDescription;
	}

	/*******************************************************************************************************************
	 * Возвращает расширение файла по имени
	 ******************************************************************************************************************/
	public static String getFileExt(String filename) {
		String ext = null;
		if (filename != null) {
			int pos = filename.lastIndexOf(".");
			if (pos > 0) {
				ext = filename.substring(pos + 1);
				if (ext.length() == 0) ext = null;
			}
		}
		return ext;
	}

	/*******************************************************************************************************************
	 * Возвращает расширение файла по имени
	 ******************************************************************************************************************/
	public static String getFileExt(File file) {
		String ext = null;
		if (file != null) ext = getFileExt(file.getName());
		return ext;
	}
}
